package 华为;

import java.util.Scanner;

/**
 * 题目描述：
 * 总共有n个人在机房，每个人有一个标号（1 <= 标号<=n），他们分成了多个团队，需要你根据收到的m
 * 条消息判定指定的两个人是否在一个团队中，具体的：
 * 1、消息构成为：a b c，整数a、b分别代表了两个人的标号，整数c代表指令。
 * 2、c==0代表a和b在一个团队内。
 * 3、c==1代表需要判定a和b的关系，如果a和b是一个团队，输出一行“we are a team”，如果不是，输出
 * 一行“we are not a team”。
 * 4、c为其它值，或当前行a或b超出1~n的范围，输出“da pian zi”。
 * 输入描述：
 * 1、第一行包含两个整数n, m(1 <= n, m <= 100000)，分别表示有n个人和m条消息。
 * 2、随后的m行，每行一条消息，消息格式为:a b c (1 <= a, b <= n, 0 <= c <= 1)。
 * 输出描述：
 * 1、c==1时，根据a和b是否在一个团队中输出一行字符串，在一个团队中输出“we are a team”，不在一
 * 个团队中输出“we are not a team”。
 * 2、c为其他值，或当前行a或b的标号小于1或者大于n时，输出字符串“da pian zi”。
 * 3、如果第一行n和m的值超出约定的范围时，输出字符串"NULL"。
 */
public class WeAreATerm24 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();

        int[][] nums = new int[m][3];
        for (int i = 0; i < m; i++) {
            nums[i][0] = scanner.nextInt();
            nums[i][1] = scanner.nextInt();
            nums[i][2] = scanner.nextInt();
        }

        weAreAterm(nums, n, m);

    }

    private static void weAreAterm(int[][] nums, int n, int m) {

        if (n < 1 || m > 100000){
            System.out.println("NULL");
            return ;
        }

        FindUnionSet findUnionSet = new FindUnionSet(n + 1);
        for (int i = 0; i < m; i++) {
            int a = nums[i][0];
            int b = nums[i][1];
            int c = nums[i][2];

            if (a < 1 || b > n){
                System.out.println("da pian zi");
            }else{
                if(c == 0){
                    findUnionSet.union(a,b);
                }else if (c == 1){
                    System.out.println(findUnionSet.find(a) == findUnionSet.find(b) ? "we are a team" : "we are not a team");
                }else{
                    System.out.println("da pian zi");
                }
            }
        }
    }

    /**
     * 并查集, 同一组的人有相同的父节点，或者组长，默认第一个为组长
     */
    public static class FindUnionSet {
        int[] unionSet;
        public FindUnionSet(int i) {
            unionSet = new int[i];
            for (int j = 0; j < i; j++) {
                unionSet[j] = j;
            }
        }

        public int find(int x){

            if (unionSet[x] != x){
                //这里是把树优高度优化了
                return unionSet[x] = find(unionSet[unionSet[x]]);
            }
            return x;
        }
        public void union(int x, int y){
            int x_root = find(x);
            int y_root = find(y);

            if (x_root != y_root){
                unionSet[y_root] = x_root;
            }
        }

    }
}
